//
//  OAuthViewController.swift
//  weibobo
//
//  Created by 丁超人 on 16/2/25.
//  Copyright © 2016年 丁超人. All rights reserved.
//

import UIKit

/// 身份验证控制器
class OAuthViewController: UIViewController {

    private lazy var webView = UIWebView()
    
    // MARK: - 视图生命周期
    override func loadView() {
        view = webView
        
        // 设置导航栏
        title = "登录新浪微博"
        //navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont.systemFontOfSize(16)]
        navigationItem.leftBarButtonItem = UIBarButtonItem(
            title: "取消",
            style: .Plain,
            target: self,
            action: "clickCloseButton")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(
            title: "自动填充",
            style: .Plain,
            target: self,
            action: "clickAutoFillButton")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 在纯代码开发中，所有的 view 都要指定背景颜色
        view.backgroundColor = UIColor.whiteColor()
        
        // 加载授权 URL
        webView.loadRequest(NSURLRequest(URL: NetworkTools.sharedTools.oauthURL))
        // 监听  用 delegate
        webView.delegate = self
    }
    
    // MARK: - 监听方法
    @objc private func clickCloseButton() {
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    /// 自动填充用户信息
    @objc private func clickAutoFillButton() {
        
        let js = "document.getElementById('userId').value='13773243711';" +
        "document.getElementById('passwd').value='dingwenchao123';"
        
        // 执行 js
        webView.stringByEvaluatingJavaScriptFromString(js)
    }
}
// MARK:-UIWebViewDelegate
extension OAuthViewController: UIWebViewDelegate {

    // 将要开始加载请求
    //webView: webView
    //request: request
    //navigationType: 导航类型
    // 是否加载，通常在ios 的代理方法中如果返回bool,通常返回 YES 表示
    // 一切OK 返回NO 不正常执行
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        // 1 如果 URL 不是回调地址 ，就继续加载页面
        
//        if let urlString = request.URL?.absoluteString {
//            if !urlString.hasPrefix(NetworkTools.sharedTools.redirectUri) {
//                return true
//            }
//        }
        // 提示 where 字句没有智能提示
        if let urlString = request.URL?.absoluteString where !urlString.hasPrefix(NetworkTools.sharedTools.redirectUri) {
        
        return true
        }
        // 2 否则判断回调参数，如果授权成功  URL 的查询字符串中包含 code 参数
        // query shi URL ？后面所有的内容
        // 1》判断query 中是否有 code=
        guard let query = request.URL?.query where query.hasPrefix("code=") else{
            print("取消授权")
            dismissViewControllerAnimated(true, completion: nil)
            
            return false
        }
        print("请求字符串" + query)
        
        // 2》获得请求码
        //请求字符串code=07d47bd4bf954db69e4de334a92cb0f0
        // 通过代理方法获取请求码的基本实现
        
        let code = query.substringFromIndex("code=".endIndex)
        print("请求码=\(code)")
        
        // 3》发起网络请求 做后续操作
        NetworkTools.sharedTools.loadAccessToken(code) { (result) -> () in
            
            guard let result = result else {
                
                print("你的网络不给力")
                return
            }
            // 设置用户账户单例的数据
            UserAccount.sharedUserAccount.updateUserAccount(result)
            
            // 登录成功
            // 1 通知通知
            NSNotificationCenter.defaultCenter().postNotificationName(DCWeiboLoginSuccessNotication, object: nil)
            // 2 关闭视图控制器
            self.clickCloseButton()
            
        }
        
        return false
    }
   
}
